package isi_ib;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import utiles_isi.isi_conexion;
import utiles_isi.isi_util;

public class isi_arrays {
	public String descriptor; 
	private isi_conexion conexion;
	private boolean cachedb;
	//public int modulo;
	public ArrayList<Double> valores;
	
	private void setCachedb(boolean cachedb_){
		cachedb=cachedb_;
		if(cachedb) {
			if(conexion==null) conexion=new isi_conexion("");}
		} 
	
	
	public isi_arrays(String descriptor_,int modulo_) {
		descriptor=descriptor_;
		//modulo=modulo_;
		valores=new ArrayList<Double>();
		conexion=null;
		cachedb=false;
	}
	public isi_arrays(String descriptor_,int modulo_,ArrayList<Double> datos_) {
		descriptor=descriptor_;
		//modulo=modulo_;
		if(datos_==null)	valores=new ArrayList<Double>();
		else valores=datos_;
		conexion=null;
		cachedb=false;
	}
	public void reset(){
		valores.clear();
	}
	/*public void setModulo(int modulo_){
		//modulo=modulo_;
		reset();		
	}*/
	public void setDescriptor(String desc_){
	this.descriptor=desc_;
	reset();		
}

	
	
public double get_dbcache(int index_){
    	double ret_=isi_util.ErrorDato;
    	/*if(cachedb)
    	{
    	String sql_="select valor from isitrader.medias_cache as m where m.`index`='"+
    	String.valueOf(index_)+
    	"' and m.descriptor='"+
    	this.descriptor+
    	"' limit 1";
    		 
			try {
				ResultSet	rs = conexion.st.executeQuery(sql_);
				if(rs.next()){ret_=rs.getDouble("valor");}
				rs.close();
			} catch (SQLException e1) {	e1.printStackTrace();}
			
    	}*/
    	return ret_;
    }
private void dbcahe(int index_,double value_){
String sql_="";
	if(cachedb)  { 
		   try {
			if(!conexion.Active()) conexion.conecta();   
			{
				sql_="insert into isitrader.medias_cache set `index`='"+
						String.valueOf(index_)+	"',valor='"+
						String.valueOf(value_)+	"',descriptor='"
						+this.descriptor+"';";
				conexion.st.execute(sql_);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   }
}


public void add(int index_,double value_){
		//valores.set(index_, value_);
		if(index_<0) return;
		rellena(index_);
		valores.set(index_, value_);
		dbcahe(index_,value_);
		
		
	}
	private void rellena(int index_){
				if(index_<0) return;
				if(valores.size()<index_+1) {valores.add((double) isi_util.ErrorDato);
				rellena(index_);
				}
				else return;
		}
	public boolean exists(int index_){
		if(index_<0)index_=0;
		if(get_dbcache(index_)!=isi_util.ErrorDato) return true;
		else
		if(valores.size()<index_+1) return false;
		else 
			if(valores.get(index_)==isi_util.ErrorDato) return false;
				else return true;
	}
	public double get(int index_){
		double ret_;
		if(index_<0) index_=0;
		ret_=get_dbcache(index_);
		if(ret_==isi_util.ErrorDato)
		{
		if(valores.size()<index_+1) ret_= isi_util.ErrorDato;
		else ret_= valores.get(index_);
		}
		return ret_;
	}
	public int Count(){
		return valores.size();
	}
	
	public double Max(int index,int modulo_){
		double Max_=0;
		if(modulo_>index)modulo_=index;
		if ( (index>=0)&& index<Count()){
			Max_=valores.get(index);
			for (int i=0;i<modulo_;i++){
					if ((index-i)>=0) if(valores.get(index-i)>Max_)Max_=valores.get(index-i);
			}
		
		}
		return Max_;
			
		}
		public double Min(int index,int modulo_){
			double Min_=0;
			if(modulo_>index)modulo_=index;
			
			if ( (index>=0)&& index< Count()){
				Min_=valores.get(index);
				for (int i=0;i<modulo_;i++){
						if ((index-i)>=0) if(valores.get(index-i)<Min_) Min_=valores.get(index-i);
				
				}		
			}
			return Min_;
			
		}
	
	
	
}
